/*
  学习目标：useState实现类型提示
  
*/

// 🔔 捕获类型使用泛型
// 🔔 泛型可以和任意类型组合使用

// const [count, setCount, ] = useState(100)

// 1. 要求count的类型, 根据初始值的类型得来
// 2. 要求返回值是一个元组
// 3. setCount是一个函数类型，参数类型是初始值类型

type UseStateFn = <T>(value: T) => [T, (newValue: T) => void];

const useState: UseStateFn = (initValue) => {
  const setValue = (newVlaue) => {
    //  ... 省略其它的代码
  };

  return [initValue, setValue];
};

const [count, setCount] = useState(0);

// 要求报错
setCount('123');
// 不报错
setCount(123);
